package main

import (
	_ "embed"
	"fmt"
	"quick-backup/app"
	"runtime/debug"

	"gitee.com/MM-Q/fastlog"
	_ "github.com/mattn/go-sqlite3"
)

// 主函数
func main() {
	// 初始化日志配置
	cfg := fastlog.NewFastLogConfig(
		"logs",
		"quick-backup.log",
	)

	// 设置日志级别
	cfg.LogLevel = fastlog.DEBUG

	// 初始化日志
	log, err := fastlog.NewFastLog(cfg)
	if err != nil {
		fmt.Printf("初始化日志失败: %v\n", err)
		return // 退出程序
	}
	defer log.Close()

	// 初始化数据目录
	var homePath string
	if tempPath, err := app.InitDataDir(); err != nil {
		log.Errorf("初始化数据目录失败: %v", err)
		return
	} else {
		homePath = tempPath
	}

	// 初始化数据库
	db, err := app.InitDB(homePath)
	if err != nil {
		log.Errorf("初始化数据库失败: %v", err)
		return
	}
	defer db.Close()

	// 初始化应用程序
	app := app.InitApp(log)
	log.Info("quick-backup开始运行...")
	log.Infof("数据目录: %s", homePath)

	// 在返回时捕获错误并写入到日志文件
	defer func() {
		if r := recover(); r != nil {
			log.Errorf("程序发生错误: %v", r)
		}
	}()

	// 优化策略, 设置运行时内存限制
	debug.SetMemoryLimit(400 * 1024 * 1024) // 400MB
	log.Success("内存限制已设置为400MB, 超过400MB将会触发更活跃的垃圾回收...")

	// 启动应用程序
	app.ShowAndRun()
}
